#include <bits/stdc++.h>
using namespace std;
int n;
const int N=1e5+50;
char s[N];
struct node{
    int l,r,cnt;
};
vector<node> gg;
int main(void){
    scanf("%d",&n);
    scanf("%s",s);
    int gcnt=0;
    for(int i=0;i<n;i++){
        if(s[i]=='G'){
            gcnt++;
        }
    }
    int ans=0;
    for(int i=0;i<n;i++){
        if(s[i]=='S'){
            continue;
        }
        int tmp=0;
        int le=i;
        while(s[i]=='G'){
            tmp++;
            i++;
            //printf("%d\n",i);
        }
        //printf("%d %d\n",le,i-1);
        gg.push_back(node{le,i-1,tmp});
        //gcnt-=tmp;
    }
    int l=gg.size();
    if(l>1){
        for(int i=0;i<l;i++){
            //printf("%d %d\n",gg[i].l,gg[i].r);
            ans=max(ans,gg[i].r-gg[i].l+2);
        }
    }
    //printf("%d\n",gg[1].cnt);
    for(int i=0;i<l-1;i++){
        //printf("%d %d %d\n",gg[i].l,gg[i].r,gg[i].cnt);
        if(gg[i+1].l-gg[i].r==2){
            //printf("%d %d\n",gg[i+1].l,gg[i].r);
            //printf("%d %d\n",gcnt,gg[i].cnt);
            if(gcnt-gg[i].cnt>0){
                int tmp=gg[i].r-gg[i].l+1+gg[i+1].r-gg[i+1].l+1+1;
                //printf("%d\n",tmp);
                if(gcnt-tmp+1==0){
                    tmp--;
                }
                ans=max(ans,tmp);
                //printf("ans %d\n",ans);
            }
        }
    }
    if(l!=0){
        ans=max(ans,gg[l-1].r-gg[l-1].l+1);
    }
    printf("%d\n",ans);
    return 0;
}